// 创建用户相关的小仓库
import { defineStore } from 'pinia';
import { reqLogin } from '@/api/user';
import { SET_TOKEN, GET_TOKEN } from '@/utils/token';
import { constantRoutes } from '@/router/routes';

import type { LoginForm, LoginResponseData } from '@/types/api/user';
import type { UserState } from '@/types/store';

const useUserStore = defineStore('User', {
  // 存储数据
  state: (): UserState => {
    return {
      token: GET_TOKEN(), // 用户唯一标识符
      menuRoutes: constantRoutes, // 路由数据
    };
  },
  // 异步|逻辑
  actions: {
    /**
     * 用户登录的方法
     * 登录逻辑
     */
    async userLogin(data: LoginForm) {
      const result: LoginResponseData = await reqLogin(data);
      console.log(result);
      // 登录请求：成功200->token
      // 登录请求：失败201->错误信息
      if (result.code == 200) {
        this.token = result.data.token as string;
        // 本地存储持久化存储
        SET_TOKEN(result.data.token as string);

        // 保证当前 async 函数返回一个成功的 Promise
        return 'ok';
      } else {
        // 返回错误信息
        return Promise.reject(new Error(result.data.message));
      }
    },
  },
  getters: {},
});

export default useUserStore;
